#!/usr/bin/env python3
"""
数据库初始化脚本
"""

from flask import Flask
from config import Config
from models import db, User, WechatAccount, SmsCode, WechatQrCode, LoginLog, RefreshToken

def create_app():
    """创建Flask应用"""
    app = Flask(__name__)
    app.config.from_object(Config)
    
    # 初始化数据库
    db.init_app(app)
    
    return app

def init_database():
    """初始化数据库表"""
    app = create_app()
    
    with app.app_context():
        try:
            # 创建所有表
            db.create_all()
            print("✅ 数据库表创建成功！")
            
            # 创建测试用户（可选）
            create_test_user()
            
        except Exception as e:
            print(f"❌ 数据库初始化失败: {str(e)}")

def create_test_user():
    """创建测试用户"""
    try:
        # 检查是否已存在测试用户
        test_user = User.query.filter_by(username='admin').first()
        
        if not test_user:
            import uuid
            test_user = User(
                uuid=str(uuid.uuid4()),
                username='admin',
                email='admin@example.com',
                phone='13800138000',
                nickname='管理员'
            )
            test_user.set_password('123456')
            
            db.session.add(test_user)
            db.session.commit()
            
            print("✅ 测试用户创建成功！")
            print("   用户名: admin")
            print("   密码: 123456")
            print("   邮箱: admin@example.com")
            print("   手机: 13800138000")
        else:
            print("ℹ️  测试用户已存在")
            
    except Exception as e:
        print(f"❌ 创建测试用户失败: {str(e)}")
        db.session.rollback()

def drop_all_tables():
    """删除所有表（谨慎使用）"""
    app = create_app()
    
    with app.app_context():
        try:
            db.drop_all()
            print("✅ 所有表已删除")
        except Exception as e:
            print(f"❌ 删除表失败: {str(e)}")

if __name__ == '__main__':
    import sys
    
    if len(sys.argv) > 1 and sys.argv[1] == '--drop':
        confirm = input("⚠️  确定要删除所有表吗？这将清除所有数据！(yes/no): ")
        if confirm.lower() == 'yes':
            drop_all_tables()
            print("重新创建表...")
            init_database()
        else:
            print("操作已取消")
    else:
        init_database()